/*
 * BucketVideoFragment.java
 * classes : com.ruint.lib.mediachooser.fragment.BucketVideoFragment
 * @author ruint
 * V 1.0.0
 * Create at 2014-12-4 下午3:10:51
 */
package com.ruint.lib.mediachooser.fragment;

import java.util.ArrayList;

import android.content.Intent;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.MediaStore.Video.VideoColumns;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;

import com.ruint.core.utils.ui.ToastUtils;
import com.ruint.corelib.R;
import com.ruint.lib.mediachooser.activity.FileViewActivity;
import com.ruint.lib.mediachooser.adapter.BucketGridAdapter;
import com.ruint.lib.mediachooser.core.BucketEntry;
import com.ruint.lib.mediachooser.core.MediaChooserConstants;

/**
 * com.ruint.lib.mediachooser.fragment.BucketVideoFragment
 * 
 * @author ruint <br/>
 *         create at 2014-12-4 下午3:10:51
 */
public class BucketVideoFragment extends Fragment {

  // The indices should match the following projections.
  private final int INDEX_BUCKET_ID = 0;
  private final int INDEX_BUCKET_NAME = 1;
  private final int INDEX_BUCKET_URL = 2;

  private static final String[] PROJECTION_BUCKET = { VideoColumns.BUCKET_ID, VideoColumns.BUCKET_DISPLAY_NAME,
      VideoColumns.DATA, };

  private View mView;
  private BucketGridAdapter mBucketAdapter;
  private GridView mGridView;
  private Cursor mCursor;

  public static BucketVideoFragment newInstance() {
    BucketVideoFragment fragment = new BucketVideoFragment();
    return fragment;
  }

  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
  }

  @Override
  public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (mView == null) {
      mView = inflater.inflate(R.layout.view_grid_layout_media_chooser, container, false);
      mGridView = (GridView) mView.findViewById(R.id.grid_media_chooser);
      init();
    } else {
      ((ViewGroup) mView.getParent()).removeView(mView);
      if (mBucketAdapter == null || mBucketAdapter.getCount() == 0) {
        ToastUtils.showToast(getActivity(), "No media file available.");
      }
    }
    return mView;
  }

  private void init() {
    final String orderBy = MediaStore.Video.Media.DATE_TAKEN;
    mCursor = getActivity().getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, PROJECTION_BUCKET,
        null, null, orderBy + " DESC");
    ArrayList<BucketEntry> buffer = new ArrayList<BucketEntry>();
    try {
      while (mCursor.moveToNext()) {
        BucketEntry entry = new BucketEntry(mCursor.getInt(INDEX_BUCKET_ID), mCursor.getString(INDEX_BUCKET_NAME),
            mCursor.getString(INDEX_BUCKET_URL));

        if (!buffer.contains(entry)) {
          buffer.add(entry);
        }
      }
      if (mCursor.getCount() > 0) {
        mBucketAdapter = new BucketGridAdapter(getActivity());
        mGridView.setAdapter(mBucketAdapter);
        mBucketAdapter.refresh(buffer);
      } else {
        ToastUtils.showToast(getActivity(), "No media file available.");
      }
      mGridView.setOnItemClickListener(new OnItemClickListener() {

        @Override
        public void onItemClick(AdapterView<?> adapter, View view, int position, long id) {

          BucketEntry bucketEntry = (BucketEntry) adapter.getItemAtPosition(position);
          Intent selectImageIntent = new Intent(getActivity(), FileViewActivity.class);
          selectImageIntent.putExtra("name", bucketEntry.getBucketName());
          selectImageIntent.putExtra("isFromBucket", true);
          getActivity().startActivityForResult(selectImageIntent, MediaChooserConstants.BUCKET_SELECT_VIDEO_CODE);

        }
      });

    } finally {
      mCursor.close();
    }
  }

  public BucketGridAdapter getAdapter() {
    if (mBucketAdapter != null) {
      return mBucketAdapter;
    }
    return null;
  }

}
